
/**
 * 在这里定义与用户信息相关的路由处理函数，供/router/userInfo.js模块使用
 */

// 导入db模块
const db = require('../db/index')
// 导入全局的配置文件
const config = require('../config')

// 获取用户信息
exports.handleGetUserInfo = (req, res) => {
  try {
    // 从认证中间件获取用户ID
    const userId = req.user.id

    // 查询用户信息
    const sql = `SELECT id, username, email, avatar, phone FROM user WHERE id = ?`
    db.query(sql, [userId], (err, results) => {
      if (err) {
        return res.status(500).json({
          code: 500,
          message: '获取用户信息失败'
        })
      }

      if (results.length === 0) {
        return res.status(404).json({
          code: 404,
          message: '用户不存在'
        })
      }

      const userInfo = results[0]
      
      // 将id字段重命名为userId，保持前端一致性
      userInfo.userId = userInfo.id
      delete userInfo.id
      
      // 如果有头像，生成完整的头像URL
      if (userInfo.avatar) {
        userInfo.avatar = `http://localhost:3333/avatars/${userInfo.avatar}`
      }

      res.status(200).json({
        code: 200,
        message: '获取用户信息成功',
        data: userInfo
      })
    })
  } catch (error) {
    console.error('获取用户信息错误:', error)
    res.status(500).json({
      code: 500,
      message: '获取用户信息失败'
    })
  }
}

// 处理头像上传：生成访问路径，并返回给前端
exports.handleAvatarUpload = (req, res) => {
  try {
    if (!req.file) {
      return res.status(400).json({
        code: 400,
        message: '未上传头像图片'
      });
    }

    // 从认证中间件获取用户ID
    const userId = req.user.id

    // 生成头像访问URL
    // 存储路径：public/avatars/xxx.png
    // 访问URL：http://localhost:3333/avatars/xxx.png
    const avatarUrl = `http://localhost:3333/avatars/${req.file.filename}`;

    // 更新数据库中的头像字段
    const sql = `UPDATE user SET avatar = ? WHERE id = ?`
    db.query(sql, [req.file.filename, userId], (err, results) => {
      if (err) {
        return res.status(500).json({
          code: 500,
          message: '头像上传失败'
        });
      }

      if (results.affectedRows !== 1) {
        return res.status(500).json({
          code: 500,
          message: '头像上传失败'
        });
      }

      res.status(200).json({
        code: 200,
        message: '头像上传成功',
        data: {
          avatarUrl,
          fileName: req.file.filename,
          size: req.file.size
        }
      });
    });
  } catch (error) {
    console.error('头像上传错误:', error)
    res.status(500).json({
      code: 500,
      message: '头像上传失败',
      error: error.message
    });
  }
}

// 修改用户信息
exports.handleUserInfoUpdate = (req, res) => {
  try {
    // 从认证中间件获取用户ID
    const userId = req.user.id
    const { username, phone, email } = req.body

    // 验证必填字段
    if (!username || !email) {
      return res.status(400).json({
        code: 400,
        message: '用户名和邮箱不能为空'
      })
    }

    // 验证手机号格式（如果提供了手机号）
    if (phone) {
      const phoneRegex = /^1[3-9]\d{9}$/
      if (!phoneRegex.test(phone)) {
        return res.status(400).json({
          code: 400,
          message: '请输入正确的手机号码'
        })
      }
    }

    // 验证邮箱格式
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
    if (!emailRegex.test(email)) {
      return res.status(400).json({
        code: 400,
        message: '请输入正确的邮箱地址'
      })
    }

    // 检查用户名是否已存在（排除当前用户）
    const checkSql = `SELECT id FROM user WHERE username = ? AND id != ?`
    db.query(checkSql, [username, userId], (checkErr, checkResults) => {
      if (checkErr) {
        return res.status(500).json({
          code: 500,
          message: '检查用户名失败'
        })
      }
      
      if (checkResults.length > 0) {
        return res.status(400).json({
          code: 400,
          message: '用户名已存在'
        })
      }

      // 更新用户信息的回调函数
      const updateUserInfo = (updateErr, updateResults) => {
        if (updateErr) {
          return res.status(500).json({
            code: 500,
            message: '修改用户信息失败'
          })
        }
        
        if (updateResults.affectedRows !== 1) {
          return res.status(500).json({
            code: 500,
            message: '修改用户信息失败'
          })
        }

        // 返回更新后的用户信息
        const selectSql = `SELECT id, username, email, avatar, phone FROM user WHERE id = ?`
        db.query(selectSql, [userId], (selectErr, selectResults) => {
          if (selectErr) {
            return res.status(500).json({
              code: 500,
              message: '获取用户信息失败'
            })
          }

          const userInfo = selectResults[0]
          
          // 将id字段重命名为userId，保持前端一致性
          userInfo.userId = userInfo.id
          delete userInfo.id
          
          // 如果有头像，生成完整的头像URL
          if (userInfo.avatar) {
            userInfo.avatar = `http://localhost:3333/avatars/${userInfo.avatar}`
          }

          res.status(200).json({
            code: 200,
            message: '修改用户信息成功',
            data: userInfo
          })
        })
      }

      // 如果提供了手机号，则更新手机号
      if (phone) {
        // 先检查user表是否有phone字段，如果没有则添加
        const checkPhoneColumnSql = `SHOW COLUMNS FROM user LIKE 'phone'`
        db.query(checkPhoneColumnSql, (checkErr, checkResults) => {
          if (checkErr) {
            return res.status(500).json({
              code: 500,
              message: '检查数据库结构失败'
            })
          }
          
          if (checkResults.length === 0) {
            // 没有phone字段，先添加
            const addPhoneColumnSql = `ALTER TABLE user ADD COLUMN phone VARCHAR(11) DEFAULT NULL COMMENT '手机号码'`
            db.query(addPhoneColumnSql, (addErr) => {
              if (addErr) {
                return res.status(500).json({
                  code: 500,
                  message: '添加手机号字段失败'
                })
              }
              // 添加字段成功后，更新用户信息
              const updateWithPhoneSql = `UPDATE user SET username = ?, phone = ?, email = ? WHERE id = ?`
              db.query(updateWithPhoneSql, [username, phone, email, userId], updateUserInfo)
            })
          } else {
            // 有phone字段，直接更新
            const updateWithPhoneSql = `UPDATE user SET username = ?, phone = ?, email = ? WHERE id = ?`
            db.query(updateWithPhoneSql, [username, phone, email, userId], updateUserInfo)
          }
        })
      } else {
        // 没有提供手机号，直接更新用户名和邮箱
        const updateSql = `UPDATE user SET username = ?, email = ? WHERE id = ?`
        db.query(updateSql, [username, email, userId], updateUserInfo)
      }
    })
  } catch (error) {
    console.error('修改用户信息错误:', error)
    res.status(500).json({
      code: 500,
      message: '修改用户信息失败'
    })
  }
}
